Sharing resources in a networked computer system, such as processors, computer memories, network bandwidth and data storage facilities, among clients, e.g., virtual machines (VMs), running on the system can increase efficiency by reducing maintenance and operating costs, allowing flexibility with respect to individual resource usage, and simplifying resource management. With respect to shared storage, the benefits include data consolidation, universal access to data, ease of storage management, and support for live migration of virtualized environments. Thus, efficiently and effectively managing the shared resources for the clients running in the networked computer system is an important task to ensure that the clients are operating at their desired levels.
Since clients share available resources in a distributed computer system, contentions for resources between the clients can arise, which may degrade the performance of the clients. Conventional resource management solutions for load balancing may resolves some of these resource contentions, but do not effectively address many of these resource contentions, especially those that results directly from a one-time or scheduled event involving multiple clients. One recourse for users today is to use anti-affinity rules to explicitly identify clients that suffer from co-location and/or have business/operational reasons to remain on different host computers. While useful in some specific cases, anti-affinity rules are applied in an all-or-nothing fashion by resource management systems and thus, are ineffective in numerous cases.